/*
 *  DataType.h
 *  WeiGame
 *
 *  Created by xm_01 on 11-8-7.
 *  Copyright 2011 __MyCompanyName__. All rights reserved.
 *
 */

#ifndef DATATYPE_HEAD_FILE
#define DATATYPE_HEAD_FILE
#import "Define.h"
typedef unsigned char	BYTE;
typedef unsigned short  WORD;
typedef unsigned int    UINT;


/////////////////////////////////////
#define ITYPE_IPHONE                0
#define ITYPE_IPAD					1
///////////////////////////////////////

//没有状态
#define US_NULL						0x00		
//站立状态
#define US_FREE						0x01	
//坐下状态
#define US_SIT						0x02		
//同意状态
#define US_READY					0x03		
//旁观状态
#define US_LOOKON					0x04		
//游戏状态
#define US_PLAYING					0x05		
//断线状态
#define US_OFFLINE					0x06	

#define LEN_USER_CHAT				128

#define HALL_GAME_PORT				8300			//大厅端口号

/////////////////////////////////
#define SUB_S_WIN_MESSAGE				204		//分享消息
//分享消息
typedef struct CMD_S_MESSAGE
{
	TCHAR					cMessage[128];		//消息内容
}CMD_S_MESSAGE;
////////////////////////////

typedef struct GetRoomListInfo
{
	int			serverPort;     //游戏房间端口好
    std::string	gameName;		//游戏名称
}GetRoomListInfo;

/////////////////////////////////////////////////////////////////////
#define MDM_GR_USER		3	
#define SUB_GR_USER_WRITE_SCORE		333	//进入房间时送分	
/////////////////////////////////////////////////////////////////////

typedef struct DBO_GR_ScoreResult				
{				
	int		lResultCode;			// 错误代码	
	TCHAR	szDescribeString[128];	// 写分返回	
}DBO_GR_ScoreResult;				



//////////////////////////////////////////////////////////////////////////

#define MDM_GF_FRAME				100									//框架命令
//用户命令
#define SUB_GF_GAME_OPTION			1									//游戏配置
#define SUB_GF_USER_READY			2									//用户准备
#define SUB_GF_LOOKON_CONFIG		3									//旁观配置
#define SUB_GF_USER_CHAT			10									//用户聊天
#define SUB_GF_USER_EXPRESSION		11									//用户表情

//游戏信息
#define SUB_GF_GAME_STATUS			100									//游戏状态
#define SUB_GF_GAME_SCENE			101									//游戏场景
#define SUB_GF_LOOKON_STATUS		102									//旁观状态

//系统消息
#define SUB_GF_SYSTEM_MESSAGE		200									//系统消息
#define SUB_GF_ACTION_MESSAGE		201									//动作消息
////////////////////////////////////////////////////////////////////
//类型掩码			
#define SMT_CHAT		0x0001	//聊天消息
#define SMT_EJECT		0x0002	//弹出消息
#define SMT_GLOBAL		0x0004	//全局消息
#define SMT_PROMPT		0x0008	//提示消息
////////////////////////////////////
//相同帐号重复登录，被踢命令
#define MDM_CM_SYSTEM  1000  
#define SUB_CM_SYSTEM_MESSAGE  1
//////////////////////////////////////

//系统消息				
typedef struct CMD_CM_SystemMessage				
{				
	WORD	wType;				//消息类型	
	WORD	wLength;			//消息长度	
	TCHAR	szString[1024];		//消息内容	
}CMD_CM_SystemMessage;				


//游戏环境
typedef struct CMD_GF_GameStatus
{
	BYTE							cbGameStatus;						//游戏状态
	BYTE							cbAllowLookon;						//旁观标志
}CMD_GF_GameStatus;




//////////////////////////////////////////////////////////////////////

//用户服务
#define MDM_GP_USER_SERVICE			3									//用户服务

//操作结果
#define SUB_GP_OPERATE_SUCCESS		900									//操作成功
#define SUB_GP_OPERATE_FAILURE		901									//操作失败
/////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////

//用户服务
#define MDM_MB_USER_SERVICE         300

#define SUB_GP_MODIFY_LOGON_PASS	101									//修改密码
#define SUB_GP_MODUSER_DATA			304									//修改手机用户资料
#define SUB_GP_MODUSER_FEEDBACK		305									//发送反馈
#define SUB_GP_MODUSER_GETTAGUSER		306								//获取目标用户积分信息
#define SUB_GP_Q_LBS_DETAIL_RESULT	307									//LBS信息查询
#define SUB_GP_Q_LBS_DETAIL_FAILED	308									//LBS信息失败

#define SUB_GP_MODUSER_FORGOTPASSWORD		309							//找回密码
#define SUB_GR_CLEAN_SCORE	310											//负分清零	大厅中
#define SUB_MB_MODUSER_INFO		311										//手机用户资料查询

/////////////////////////////////////////////////////////////////////////////
//手机端发送到服务端结构体
struct CMD_MB_MODUSER_USERID
{
	DWORD				dwUserID;		//用户 I D
};
//服务端发送到手机端结构体
struct CMD_MB_MODUSER_INFO
{
	WORD					wFaceID;		//头像 I D
	TCHAR				szMobilePhone[12];	//手机号码
	TCHAR				szPassPortID[19];	//身份证号码
};

/////////////////////////////////////
//负分清零	大厅中
typedef struct
{					
	DWORD	dwUserID;	//用户 I D		
}CMD_MB_CLEANSCORE;		

/////////////////////////////////////////////////////

typedef struct _CMD_GP_QueryLBSDetailResult							
{							
	int			dwScore;			//金币			
	WORD		wKindID;			//所在游戏			
	int			dwKindScore;			//所在游戏积分			
	int			dwKindWin;			//所在游戏胜局数			
	int			dwKindLost;			//所在游戏负局数			
	int			dwKindFlee;			//所在游戏逃局数			
	TCHAR		szTableDetail[50];			//所在游戏桌子信息描述			
}CMD_GP_QueryLBSDetailResult;							


typedef struct CMD_GP_QueryIndividual							
{							
	DWORD dwUserID;						
}CMD_GP_QueryIndividual;							



//修改密码						
typedef struct CMD_GP_ModifyLogonPass						
{						
	DWORD	dwUserID;		//用户 I D		
	TCHAR	szDesPassword[LEN_PASSWORD];		//用户密码	新	
	TCHAR	szScrPassword[LEN_PASSWORD];		//用户密码	旧	
}CMD_GP_ModifyLogonPass;						


//手机用户资料				
typedef struct CMD_MB_ModUserData				
{				
	//基本资料		
	DWORD	dwUserID;	//用户 I D
	WORD	wFaceID;	//头像索引
	TCHAR	szPassPortID[19];	//证件号码
	TCHAR	szMobilePhone[12];	//手机号码
}CMD_MB_ModUserData;				


//用户反馈		
typedef struct CMD_MB_Feedback			
{			
	DWORD	dwUserID;	//用户 I D
	TCHAR	szFeedbackString[128];	//描述消息
}CMD_MB_Feedback;	

//找回密码
typedef struct CMD_GP_ForgetPassword					
{					
	TCHAR	szAccounts[LEN_ACCOUNTS];			//登录帐号
	TCHAR	szMobile[LEN_MOBILE_PHONE];			//用户手机号	
}CMD_GP_ForgetPassword;					


////////////////////////////////////////////////////
//注册发送命令
#define MDM_MB_LOGON	100	
#define SUB_GP_REGISTER_ACCOUNTS	3


#define MDM_GR_LOGON				1	
#define SUB_GR_LOGON_FAILURE		101	//注册失败
#define SUB_GR_LOGON_MAILSUCCESS	103	//MAIL登录成功
/////////////////////////////////////

//注册帐号					
typedef struct 					
{					
	//系统信息				
	DWORD	dwPlazaVersion;	//广场版本		
	BYTE    cbDeviceType;    //设备类型.0、 PC  1、 iPhone  2、Android		
	
	//密码变量				
	TCHAR	szLogonPass[LEN_MD5];	//登录密码		
	TCHAR	szInsurePass[LEN_MD5];	//银行密码		
	
	//注册信息				
	WORD	wFaceID;	//头像标识		
	BYTE	cbGender;	//用户性别		
	TCHAR	szAccounts[LEN_ACCOUNTS];	//登录帐号		
	TCHAR	szNickName[LEN_NICKNAME];	//用户昵称		
	
	//连接信息				
	TCHAR	szMobilePhone[LEN_MOBILE_PHONE];	//电话号码		
}CMD_MB_RegisterAccounts;								

//登录失败				
typedef struct 				
{				
	long	lResultCode;		//错误代码
	TCHAR	szDescribeString[128];		//描述消息
}DBO_MB_LogonFailure;				

///////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
//列表命令

#define MDM_MB_SERVER_LIST			101									//列表信息

//列表信息
#define SUB_MB_LIST_KIND			100									//种类列表
#define SUB_MB_LIST_SERVER			101									//房间列表
#define SUB_MB_LIST_FINISH			200									//列表完成

//////////////////////////////////////////////////////////////////////////////////
//游戏房间
typedef struct 
{
	WORD							wKindID;							//名称索引
	WORD							wNodeID;							//节点索引
	WORD							wSortID;							//排序索引
	WORD							wServerID;							//房间索引
	WORD							wServerPort;						//房间端口
	DWORD							dwOnLineCount;						//在线人数
	DWORD							dwFullCount;						//满员人数	增加字段	
	TCHAR							szServerAddr[32];					//房间名称
	TCHAR							szServerName[32];					//房间名称
}tagGameServer;


typedef struct 
{
	int wUserID;
	int wTableID;
	int wChairID;
	int wStatic;
	int wFaceID;
	int wUserType;
}UserTableStatic;

typedef struct 
{
	int wTableID;
	int wChairID; 
}beforSitupPosition;

//请求失败
typedef struct CMD_GR_RequestFailure
{
	int								cbFailureCode;						//错误代码
	TCHAR							szDescribeString[256];				//描述信息
}CMD_GR_RequestFailure;

//登录成功
typedef struct 
{
	WORD							wFaceID;							//头像标识
	BYTE							cbGender;							//用户性别
	DWORD							dwUserID;							//用户 I D
	DWORD							dwGameID;							//游戏 I D
	int 							dwExperience;						//经验数值
	long							lUserScore;							//用户金币
	TCHAR							szNickName[LEN_NICKNAME];			//用户昵称
							
}CMD_MB_LogonSuccess;

//登录失败
typedef struct CMD_MB_LogonFailure
{
	DWORD							lResultCode;						//错误代码
	TCHAR							szDescribeString[256];				//描述消息
}CMD_MB_LogonFailure;
//用户进入
typedef struct 
{
	//用户属性
	DWORD 	dwUserID;							//游戏 I D	
	WORD	wFaceID;							//头像索引
	BYTE	cbGender;							//用户性别
	BYTE	dwUserType;							//用户类型    0、宝软用户  1、新浪微博用户			

	WORD	wTableID;							//桌子索引
	WORD	wChairID;							//椅子索引
	BYTE	cbUserStatus;						//用户状态
	
	
	int 	lScore;	//用户分数	
	int 	lGrade;	//用户成绩	
	int 	lInsure;	//用户银行	
	int		lKindScore;			//用户积分		

	
	TCHAR	szNickName[LEN_NICKNAME];	//用户昵称	
	int 	dwWinCount;	//胜利盘数	
	int 	dwLostCount;	//失败盘数	
	int 	dwDrawCount;	//和局盘数	
	int 	dwFleeCount;	//逃跑盘数	
	int 	dwExperience;	//用户经验	
}tagUserInfoHeadMB;
									

//用户状态
typedef struct tagUserStatus
{
	WORD							wTableID;							//桌子索引
	WORD							wChairID;							//椅子位置
	BYTE							cbUserStatus;						//用户状态
}tagUserStatus;

typedef struct CMD_GR_UserStatus
{
	DWORD							dwUserID;							//用户标识
	tagUserStatus					UserStatus;							//用户状态
}CMD_GR_UserStatus;


//数据库中用户信息结构体
typedef struct UserInfoDatabase
{
	//用户属性
	int							dwUserID;							//用户I D
	//头像信息
	int							wFaceID;							//头像索引
	//用户属性
	int							cbGender;							//用户性别
	//用户状态
	int							wTableID;							//桌子索引
	int							wChairID;							//椅子索引
	int							cbUserStatus;						//用户状态
	
	//积分信息
	int							lScore;								//用户分数
	int							wUserType;							//用户类型
	
	string                      szNickName;							//用户昵称
	
}UserInfoDatabase;

//用户聊天 发送
typedef struct CMD_GF_C_UserChat
{
	WORD							wChatLength;						//信息长度
	DWORD							dwChatColor;						//信息颜色
	DWORD							dwTargetUserID;						//目标用户
	TCHAR							szChatString[LEN_USER_CHAT];		//聊天信息
}CMD_GF_C_UserChat;

//用户聊天 接收
typedef struct CMD_GF_S_UserChat
{
	WORD							wChatLength;						//信息长度
	DWORD							dwChatColor;						//信息颜色
	DWORD							dwSendUserID;						//发送用户
	DWORD							dwTargetUserID;						//目标用户  0面向所有人
	TCHAR							szChatString[LEN_USER_CHAT];		//聊天信息
}CMD_GF_S_UserChat;

//用户积分
typedef struct tagUserScore
{
	//积分信息
	int							lScore;								//用户分数
	int							lGrade;								//用户成绩
	int							lInsure;							//用户银行
	
	//输赢信息
	int							dwWinCount;							//胜利盘数
	int							dwLostCount;						//失败盘数
	int							dwDrawCount;						//和局盘数
	int							dwFleeCount;						//逃跑盘数
	
	//全局信息
	int							dwUserMedal;						//用户奖牌
	int							dwExperience;						//用户经验
	int							dwLoveLiness;						//用户魅力
	
	//游戏信息
	int			dwKindScore;		//游戏积分	
	int			dwKindWin;			//胜利盘数	
	int			dwKindLost;			//失败盘数	
	int			dwKindFlee;			//逃跑盘数	
	int			dwKindDraw;			//和局盘数	
	
	
}tagUserScore;
typedef struct CMD_GR_UserScore
{
	int								dwUserID;							//用户标识
	tagUserScore					UserScore;							//积分信息
}CMD_GR_UserScore;

//操作失败					
typedef struct DBO_GP_OperateFailure					
{					
	int		lResultCode;			//操作代码	
	TCHAR	szDescribeString[128];	//描述消息	
}DBO_GP_OperateFailure;					

//操作成功					
typedef struct DBO_GP_OperateSuccess					
{					
	int		lResultCode;				//操作代码	
	TCHAR	szDescribeString[128];		//成功消息	
}DBO_GP_OperateSuccess;

//2011.8.23
//wym
//////////////////////////////////////////////////////////////////////////////////
//状态命令

#define MDM_GR_STATUS				4									//状态信息

#define SUB_GR_TABLE_INFO			100									//桌子信息
#define SUB_GR_TABLE_STATUS			101									//桌子状态

//////////////////////////////////////////////////////////////////////////////////
//桌子状态结构体
typedef struct tagTableStatus
{
	BYTE							cbTableLock;						//锁定标志
	BYTE							cbPlayStatus;						//游戏标志
}tagTableStatus;

//桌子信息
typedef struct CMD_GR_TableInfo
{
	WORD							wTableCount;						//桌子数目
	tagTableStatus					TableStatusArray[512];				//桌子状态
}CMD_GR_TableInfo;

//桌子状态
typedef struct CMD_GR_TableStatus
{
	WORD							wTableID;							//桌子号码
	tagTableStatus					TableStatus;						//桌子状态
}CMD_GR_TableStatus;
//////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////
//LBS
#define MDM_GP_LBS   1 // LBS主命令			

// LBS动作			
#define SUB_GP_SUBMIT_LOCATION 	1   // 提交自身位置
#define SUB_GP_GET_NEAR_USER    2   // 查询附近玩家
#define SUB_GP_GET_TARGET_USER  3   // 查询目标玩家

// LBS动作回馈			
#define SUB_GP_SUBMIT_SUCCESS   1   // 提交成功			
#define SUB_GP_SUBMIT_FAILED    2   // 提交失败			
#define SUB_GP_GET_NEAR_FAILED		101 // 查询附近失败
#define SUB_GP_GET_NEAR_RESULT		102 // 查询附近结果
#define	SUB_GP_GET_TARGET_FAILED	103 // 查询指定目标失败
#define	SUB_GP_GET_TARGET_RESULT	104 // 查询指定目标结果
#define SUB_GP_GET_NEAR_NO_RESULT	105 // 查询附近的人无返回值(超页或指定页没有查询记录)
// 查询目标玩家
// userID 根据SUB_GP_GET_NEAR_USER和SUB_GP_GET_TARGET_USER来查询离自身最近的玩家和目标玩家


typedef struct CMD_GP_LbsFailed
{
	long lResultCode;	// 错误代码
}CMD_GP_LbsFailed;

//提交用户坐标			
typedef struct CMD_GP_LbsSubmit			
{			
	//基本资料		
	DWORD    dwUserID; 	// 用户ID	
	long    dwLongitude;	// 经度	
	long    dwLatitude;	// 纬度	
	DWORD    dwIndex;	// zone Index	
	//TCHAR    szNickName[32];	//昵称	
	//DWORD    dwFaceID; 	//FaceID	
}CMD_GP_LbsSubmit;			

//查找用户			
typedef struct CMD_GP_GetUser			
{			
	DWORD    dwUserID;	// 用户ID	
}CMD_GP_GetUser;			

typedef struct CMD_GP_GetUserNear
{
	DWORD    dwUserID;	// 用户ID
	WORD	 wPage;		// 页码
}CMD_GP_GetUserNear;			

typedef struct CMD_GP_LbsQueryDetail			
{			
	DWORD    dwUserID;	    // 用户ID	
	long     dwLongitude;	// 经度	
	long    dwLatitude;	// 纬度		
	BYTE     cbGender;	    // 性别
	TCHAR    szNickName[16];// 昵称
}CMD_GP_LbsQueryDetail;			

////////////////////////////////////////////////////////////////////////
///////////////////
//游戏登入失败
//登录失败
typedef struct CMD_GR_LogonFailure
{
	DWORD							lErrorCode;							//错误代码
	TCHAR							szDescribeString[128];				//描述消息
}CMD_GR_LogonFailure;
//////////////////////////////////////////////////////////


enum TITLE_ENUM
{
	DDZ = 0,
	BJ,
	SH,
	DZPK,
	GAMEHALL
};

enum weiqp_game_id
{
	GID_DZPK = 3,				//德州扑克
	GID_SH = 4,					//梭哈
	GID_BJ = 16,				//21点
	GID_DDZ = 999				//斗地主
};



/****************************************************************
 * 排行榜与谁在玩常量及结构体定义
 * suli 2011.09.23 10:00
 ****************************************************************/

#define SUB_GP_GET_WHO_PLAYING_LIST	501	// 谁在玩列表
#define SUB_GP_GET_RANK_LIST	502	// 排行榜列表
#define SUB_GP_GET_WHO_PL_EX	503	// 谁在玩列表积分

#define SUB_GC_GWPL_RESULT	600	// 查询谁在玩结果返回
#define SUB_GC_GWPL_FAILED	601	// 查询谁在玩失败
#define SUB_GC_GRL_RESULT	602	// 查询排行榜列表返回
#define SUB_GC_GRL_FAILED	603	// 查询排行榜列表失败
#define SUB_GC_GRL_TREASURE	605	// 查询金币排行榜返回
#define SUB_GC_GWPLEX_RESULT	606	// 查询谁在玩带游戏积分返回
#define SUB_GC_GWPLEX_FAILED	607	// 查询谁在玩带游戏积分失败
#define SUB_GC_GWPLEX_COUNT	608	// 谁在玩人数总数
//MDM_MB_USER_SERVICE	300	//手机用户服务	
#define SUB_GP_BOARD_MSG_RESULT	609	// 活动公告信息 	

// s->c	活动公告信息 		登陆成功后服务器发送			
typedef struct CMD_BoardResult						
{						
	int			dwDate;			//时间
	TCHAR		szTitle[16];			//标题
	TCHAR		szContent[256];			//内容
}CMD_BoardResult;


 //suli 2011.10.27 11:20, 统一使用下面的结构体，关掉此结构体；
struct CMD_QueryResult				
{				
	DWORD	dwUserID;	// 用户ID	
	TCHAR	szNickName[32];	// 昵称	
	WORD	wFaceID;	// 头像ID	
	BYTE	cbGender;	// 性别	
	BYTE    cbUserType;  //用户标示 0、宝软 1、新浪
	DWORD	dwScore;	// 积分
	DWORD	dwWinCount;	// 胜	
	DWORD	dwLostCount;	// 负	
	DWORD	dwFleeCount;	// 逃	
	DWORD	dwCustomID;	// 自定义头像ID，非0则有自定义头像，去网站查找下载	
};
 

struct CMD_QueryResultEx				
{				
	DWORD	dwUserID;	// 用户ID	
	TCHAR	szNickName[32];	// 昵称	
	WORD	wFaceID;	// 头像ID	
	BYTE	cbGender;	// 性别	
	BYTE    cbUserType;  //用户标示 0、宝软 1、新浪
	DWORD	dwScore;	// 积分
	DWORD	dwKindScore;	//
	DWORD	dwWinCount;	// 胜	
	DWORD	dwLostCount;	// 负	
	DWORD	dwFleeCount;	// 逃	
	DWORD	dwCustomID;	// 自定义头像ID，非0则有自定义头像，去网站查找下载	
};

struct CMD_WhoIsPlayCount			
{			
	DWORD		dwCount;
};

#endif
